最近很多人在讨论 Skills,但是很少人知道怎么构建一个自己专属的 Skills,今天我用全文给大家讲清楚。
从提示词到 Skills,本质上是 SOP 工作流的进化和迁移,懂提示词的人对 Skills 是很容易上手,所以我建议大家学习 Skills 的时候,先去学习提示词。
大多数人在写 Skills 时第一件事便是错的,
他们将 Skills 当作强化版的提示词,并且想要把所有背景与要求一次性全部塞进去,最终导致文件又长又杂乱。
使得 AI 要么难以找到触发的时机,要么在加载后把上下文挤满了,使得输出的质量不但没有提升反而降低了。
如果想弄清楚技能包是怎么回事,需要知道它的运行机制。
【1】每一个 Skills 就如同一个文件夹,里头装着说明文档、脚本以及参考资料,就是把做事的流程编写成能够被调用的文件。
【2】它有着极为精妙的设计在于分层加载
AI 仅仅记着每个技能的名称以及一句话的描述内容,只有当确认任务和其相关时才会去读取正文部分,在用到具体资料的时候才会打开对应的文件,就算装入几十个技能也不会让速度变卡。
【3】描述的内容直接影响着触发的概率,
因此必须要把做什么以及什么时候启用写得清清楚楚,那些写得含含糊糊的技能包,要不就是永远都不会触发,要不就是在错误的场景里胡乱触发,这两种结果都是没有任何意义的。
【4】另外正文里面,还有一条隐形的界限,要控制在 500 行以内
过长的指令会分散注意力,详细的资料会被拆分到 references 目录里根据需要去读取,写不下的细节就放到附属文件当中,主文件要保持简洁明了。
同时脚本的价值被大大地低估了,放进 scripts 目录里的代码在执行的时候不会占用上下文内容,AI 只需要知道运行命令就行,并且格式校验和数据处理就交给脚本来做,比写在正文里面要可靠的多。
并非所有的任务都适合被制作成技能包,高频重复、流程固定、能够脚本化的这三类任务才具备写入的价值。
如果把偶尔才会用到一次的需求写进技能包里面,那纯粹是给自己增添维护的麻烦,还不如不写。
另外动手搭建 SKILLS 其实只需要四个步骤,建立文件夹、写说明文档、把脚本放 scripts 里、把长文档放 references 里。
而且命名的时候只能使用英文小写字母加上连字符,且必须要和文件夹的名称保持一致,如果违反了规则就会直接出现加载失败的情况。
每次使用的时候都要注意触发是否精准、输出是否稳定,如果发现有偏差就要回去修改描述和流程,
因此需要经过几轮迭代之后才可以稳定下来。
有很多人区分不了 Skills 和 MCP,MCP 负责连接外部工具,Skills 负责管理让 AI 做事的流程,并且两者搭配使用不
会产生冲突。
与一次性使用的提示词相比较,Skills 在编写完成之后能够永久发挥作用,就算更换对话或者更换任务,
依然能够正常调用它,而提示词需要反复丢给大模型。
但是,我说的是但是,并不是所有的内容都适合做成 Skills,如果只是一次性或者临时性的任务,真的没必要做成 Skills,因为维护成本挺高的,也不方便快速调整。
如果你有自己的专属写作提示词,那就没必要做成 skills(听劝)。
文章结尾,我也给大家分享 skills 的制作流程和方法论
一、目录结构
skill-name/
├── SKILL.md # 必须 - 主指令文件
├── reference.md # 可选 - 详细参考文档
├── examples.md # 可选 - 使用示例
└── scripts/ # 可选 - 工具脚本
├── validate.py
└── helper.sh
二、存储位置
个人技能
~/skills/skill-name/
所有项目可用
项目技能
./skills/skill-name/
仅当前仓库可用
三、SKILL.md 文件结构
---
name: contentany
description: 技能描述,说明做什么以及何时触发
disable-model-invocation: true
---技能名称
Instructions
清晰的分步指引Examples
具体使用示例
必填字段
name:最多64字符,仅小写字母/数字/连字符
唯一标识符
description:最多1024字符,非空
Agent判断何时应用此技能
四、运行流程
发现阶段
Agent读取用户消息
系统将可用skills的description注入系统提示词
Agent根据description判断是否需要调用某个skill
加载阶段
匹配到相关skill后,Agent读取SKILL.md文件
如需详细信息,按引用路径读取reference.md等附属文件
引用层级建议保持在一层,避免深层嵌套
执行阶段
Agent按照SKILL.md中的指令执行任务
如有scripts目录中的脚本,根据指令决定是执行还是作为参考
按照模板或工作流完成具体操作
验证阶段
如果skill中包含验证步骤,执行验证脚本
验证失败则修复后重新验证
验证通过后完成任务
五、触发机制
显式调用:
disable-model-invocation: true
用户明确提及skill名称时触发
自动调用:
不设置该字段
Agent根据上下文自动判断是否触发